{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model Evaluation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Review of last class\n",
    "\n",
    "- Goal was to predict the **response value** of an **unknown observation**\n",
    "    - predict the species of an unknown iris\n",
    "    - predict the position of an unknown NBA player\n",
    "- Made predictions using KNN models with **different values of K**\n",
    "- Need a way to choose the **\"best\" model**: the one that \"generalizes\" to \"out-of-sample\" data\n",
    "\n",
    "**Solution:** Create a procedure that **estimates** how well a model is likely to perform on out-of-sample data and use that to choose between models.\n",
    "\n",
    "**Note:** These procedures can be used with **any machine learning model**, not only KNN."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation procedure #1: Train and test on the entire dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Train the model on the **entire dataset**.\n",
    "2. Test the model on the **same dataset**, and evaluate how well we did by comparing the **predicted** response values with the **true** response values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# read the NBA data into a DataFrame\n",
    "import pandas as pd\n",
    "url = 'https://raw.githubusercontent.com/justmarkham/DAT4-students/master/kerry/Final/NBA_players_2015.csv'\n",
    "nba = pd.read_csv(url, index_col=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# map positions to numbers\n",
    "nba['pos_num'] = nba.pos.map({'C':0, 'F':1, 'G':2})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# create feature matrix (X)\n",
    "feature_cols = ['ast', 'stl', 'blk', 'tov', 'pf']\n",
    "X = nba[feature_cols]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# create response vector (y)\n",
    "y = nba.pos_num"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### KNN (K=50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1,\n",
       "       1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2,\n",
       "       0, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2,\n",
       "       1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 2, 0, 1, 1, 1, 1, 2, 1, 2, 2,\n",
       "       1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1,\n",
       "       2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1,\n",
       "       1, 2, 2, 1, 1, 2, 0, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1,\n",
       "       0, 2, 0, 1, 1, 1, 1, 1, 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1,\n",
       "       1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 0, 0, 1, 1, 2, 1, 2,\n",
       "       2, 2, 1, 1, 1, 2, 0, 1, 1, 0, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 2,\n",
       "       1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 0, 0, 1, 2, 0, 1, 2, 1, 1, 1, 1,\n",
       "       2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 0, 1, 1, 1, 2, 2, 2, 0, 0,\n",
       "       2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 0, 1, 1, 1,\n",
       "       1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,\n",
       "       0, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 0, 1, 1, 2, 1, 1, 2, 1, 1, 2,\n",
       "       2, 2, 2, 1, 2, 1, 0, 2, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2,\n",
       "       1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 0, 2, 1, 1, 2,\n",
       "       1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 0,\n",
       "       2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 2, 1, 2, 1,\n",
       "       2, 0, 1, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 0, 1, 1, 1,\n",
       "       2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1], dtype=int64)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import the class\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "# instantiate the model\n",
    "knn = KNeighborsClassifier(n_neighbors=50)\n",
    "\n",
    "# train the model on the entire dataset\n",
    "knn.fit(X, y)\n",
    "\n",
    "# predict the response values for the observations in X (\"test the model\")\n",
    "knn.predict(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# store the predicted response values\n",
    "y_pred_class = knn.predict(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To evaluate a model, we also need an **evaluation metric:**\n",
    "\n",
    "- Numeric calculation used to **quantify** the performance of a model\n",
    "- Appropriate metric depends on the **goals** of your problem\n",
    "\n",
    "Most common choices for classification problems:\n",
    "\n",
    "- **Classification accuracy**: percentage of correct predictions (\"reward function\" since higher is better)\n",
    "- **Classification error**: percentage of incorrect predictions (\"loss function\" since lower is better)\n",
    "\n",
    "In this case, we'll use classification accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.665271966527\n"
     ]
    }
   ],
   "source": [
    "# compute classification accuracy\n",
    "from sklearn import metrics\n",
    "print metrics.accuracy_score(y, y_pred_class)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is known as **training accuracy** because we are evaluating the model on the same data we used to train the model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### KNN (K=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors=1)\n",
    "knn.fit(X, y)\n",
    "y_pred_class = knn.predict(X)\n",
    "print metrics.accuracy_score(y, y_pred_class)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Problems with training and testing on the same data\n",
    "\n",
    "- Goal is to estimate likely performance of a model on **out-of-sample data**\n",
    "- But, maximizing training accuracy rewards **overly complex models** that won't necessarily generalize\n",
    "- Unnecessarily complex models **overfit** the training data:\n",
    "    - Will do well when tested using the in-sample data\n",
    "    - May do poorly on out-of-sample data\n",
    "    - Learns the \"noise\" in the data rather than the \"signal\"\n",
    "    - From Quora: [What is an intuitive explanation of overfitting?](http://www.quora.com/What-is-an-intuitive-explanation-of-overfitting/answer/Jessica-Su)\n",
    "\n",
    "**Thus, training accuracy is not a good estimate of out-of-sample accuracy.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![1NN classification map](images/iris_01nn_map.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation procedure #2: Train/test split"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Split the dataset into two pieces: a **training set** and a **testing set**.\n",
    "2. Train the model on the **training set**.\n",
    "3. Test the model on the **testing set**, and evaluate how well we did.\n",
    "\n",
    "What does this accomplish?\n",
    "\n",
    "- Model can be trained and tested on **different data** (we treat testing data like out-of-sample data).\n",
    "- Response values are known for the testing set, and thus **predictions can be evaluated**.\n",
    "\n",
    "This is known as **testing accuracy** because we are evaluating the model on an independent \"test set\" that was not used during model training.\n",
    "\n",
    "**Testing accuracy is a better estimate of out-of-sample performance than training accuracy.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Understanding \"unpacking\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def min_max(nums):\n",
    "    smallest = min(nums)\n",
    "    largest = max(nums)\n",
    "    return [smallest, largest]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 3]\n",
      "<type 'list'>\n"
     ]
    }
   ],
   "source": [
    "min_and_max = min_max([1, 2, 3])\n",
    "print min_and_max\n",
    "print type(min_and_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "<type 'int'>\n",
      "3\n",
      "<type 'int'>\n"
     ]
    }
   ],
   "source": [
    "the_min, the_max = min_max([1, 2, 3])\n",
    "print the_min\n",
    "print type(the_min)\n",
    "print the_max\n",
    "print type(the_max)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Understanding the `train_test_split` function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from sklearn.cross_validation import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(478, 5)\n",
      "(358, 5)\n",
      "(120, 5)\n"
     ]
    }
   ],
   "source": [
    "# before splitting\n",
    "print X.shape\n",
    "\n",
    "# after splitting\n",
    "print X_train.shape\n",
    "print X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(478L,)\n",
      "(358L,)\n",
      "(120L,)\n"
     ]
    }
   ],
   "source": [
    "# before splitting\n",
    "print y.shape\n",
    "\n",
    "# after splitting\n",
    "print y_train.shape\n",
    "print y_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![train_test_split](images/train_test_split.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Understanding the `random_state` parameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     ast  stl  blk  tov   pf\n",
      "230  0.9  0.6  0.3  0.5  1.7\n",
      "     ast  stl  blk  tov  pf\n",
      "424  0.4  0.2  0.1  0.8   1\n",
      "230    1\n",
      "Name: pos_num, dtype: int64\n",
      "424    1\n",
      "Name: pos_num, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# WITHOUT a random_state parameter\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y)\n",
    "\n",
    "# print the first element of each object\n",
    "print X_train.head(1)\n",
    "print X_test.head(1)\n",
    "print y_train.head(1)\n",
    "print y_test.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     ast  stl  blk  tov   pf\n",
      "401  2.9  1.3  0.2  1.4  2.3\n",
      "    ast  stl  blk  tov   pf\n",
      "32  1.5  0.9  0.6  1.1  3.1\n",
      "401    2\n",
      "Name: pos_num, dtype: int64\n",
      "32    1\n",
      "Name: pos_num, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# WITH a random_state parameter\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=99)\n",
    "\n",
    "# print the first element of each object\n",
    "print X_train.head(1)\n",
    "print X_test.head(1)\n",
    "print y_train.head(1)\n",
    "print y_test.head(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Using the train/test split procedure (K=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# STEP 1: split X and y into training and testing sets (using random_state for reproducibility)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=99)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
       "           metric_params=None, n_neighbors=1, p=2, weights='uniform')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# STEP 2: train the model on the training set (using K=1)\n",
    "knn = KNeighborsClassifier(n_neighbors=1)\n",
    "knn.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.616666666667\n"
     ]
    }
   ],
   "source": [
    "# STEP 3: test the model on the testing set, and check the accuracy\n",
    "y_pred_class = knn.predict(X_test)\n",
    "print metrics.accuracy_score(y_test, y_pred_class)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Repeating for K=50"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.675\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors=50)\n",
    "knn.fit(X_train, y_train)\n",
    "y_pred_class = knn.predict(X_test)\n",
    "print metrics.accuracy_score(y_test, y_pred_class)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Bias-variance tradeoff](images/bias_variance.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comparing testing accuracy with null accuracy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Null accuracy is the accuracy that could be achieved by **always predicting the most frequent class**. It is a benchmark against which you may want to measure your classification model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2    60\n",
       "1    49\n",
       "0    11\n",
       "dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# examine the class distribution\n",
    "y_test.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2    0.5\n",
       "dtype: float64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# compute null accuracy\n",
    "y_test.value_counts().head(1) / len(y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Searching for the \"best\" value of K"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# calculate TRAINING ERROR and TESTING ERROR for K=1 through 100\n",
    "\n",
    "k_range = range(1, 101)\n",
    "training_error = []\n",
    "testing_error = []\n",
    "\n",
    "for k in k_range:\n",
    "\n",
    "    # instantiate the model with the current K value\n",
    "    knn = KNeighborsClassifier(n_neighbors=k)\n",
    "\n",
    "    # calculate training error\n",
    "    knn.fit(X, y)\n",
    "    y_pred_class = knn.predict(X)\n",
    "    training_accuracy = metrics.accuracy_score(y, y_pred_class)\n",
    "    training_error.append(1 - training_accuracy)\n",
    "    \n",
    "    # calculate testing error\n",
    "    knn.fit(X_train, y_train)\n",
    "    y_pred_class = knn.predict(X_test)\n",
    "    testing_accuracy = metrics.accuracy_score(y_test, y_pred_class)\n",
    "    testing_error.append(1 - testing_accuracy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# allow plots to appear in the notebook\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('fivethirtyeight')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>testing error</th>\n",
       "      <th>training error</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>0.366667</td>\n",
       "      <td>0.351464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>0.358333</td>\n",
       "      <td>0.347280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>0.366667</td>\n",
       "      <td>0.345188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>0.366667</td>\n",
       "      <td>0.347280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>0.366667</td>\n",
       "      <td>0.345188</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     testing error  training error\n",
       "K                                 \n",
       "100       0.366667        0.351464\n",
       "99        0.358333        0.347280\n",
       "98        0.366667        0.345188\n",
       "97        0.366667        0.347280\n",
       "96        0.366667        0.345188"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# create a DataFrame of K, training error, and testing error\n",
    "column_dict = {'K': k_range, 'training error':training_error, 'testing error':testing_error}\n",
    "df = pd.DataFrame(column_dict).set_index('K').sort_index(ascending=False)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x17406438>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1694bc18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the relationship between K (HIGH TO LOW) and TESTING ERROR\n",
    "df.plot(y='testing error')\n",
    "plt.xlabel('Value of K for KNN')\n",
    "plt.ylabel('Error (lower is better)')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>testing error</th>\n",
       "      <th>training error</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.258333</td>\n",
       "      <td>0.286611</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.266667</td>\n",
       "      <td>0.282427</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.266667</td>\n",
       "      <td>0.284519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.266667</td>\n",
       "      <td>0.282427</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.266667</td>\n",
       "      <td>0.284519</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    testing error  training error\n",
       "K                                \n",
       "14       0.258333        0.286611\n",
       "13       0.266667        0.282427\n",
       "18       0.266667        0.284519\n",
       "16       0.266667        0.282427\n",
       "15       0.266667        0.284519"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# find the minimum testing error and the associated K value\n",
    "df.sort('testing error').head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.2583333333333333, 14)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# alternative method\n",
    "min(zip(testing_error, k_range))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What could we conclude?\n",
    "\n",
    "- When using KNN on this dataset with these features, the **best value for K** is likely to be around 14.\n",
    "- Given the statistics of an **unknown player**, we estimate that we would be able to correctly predict his position about 74% of the time."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Training error versus testing error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x17fe76d8>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x17fd1d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the relationship between K (HIGH TO LOW) and both TRAINING ERROR and TESTING ERROR\n",
    "df.plot()\n",
    "plt.xlabel('Value of K for KNN')\n",
    "plt.ylabel('Error (lower is better)')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **Training error** decreases as model complexity increases (lower value of K)\n",
    "- **Testing error** is minimized at the optimum model complexity"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Bias-variance tradeoff](images/training_testing_error.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Making predictions on out-of-sample data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given the statistics of a (truly) unknown player, how do we predict his position?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1], dtype=int64)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# instantiate the model with the best known parameters\n",
    "knn = KNeighborsClassifier(n_neighbors=14)\n",
    "\n",
    "# re-train the model with X and y (not X_train and y_train) - why?\n",
    "knn.fit(X, y)\n",
    "\n",
    "# make a prediction for an out-of-sample observation\n",
    "knn.predict([1, 1, 0, 1, 2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Disadvantages of train/test split?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What would happen if the `train_test_split` function had split the data differently? Would we get the same exact results as before?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.641666666667\n"
     ]
    }
   ],
   "source": [
    "# try different values for random_state\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=98)\n",
    "knn = KNeighborsClassifier(n_neighbors=50)\n",
    "knn.fit(X_train, y_train)\n",
    "y_pred_class = knn.predict(X_test)\n",
    "print metrics.accuracy_score(y_test, y_pred_class)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Testing accuracy is a **high-variance estimate** of out-of-sample accuracy\n",
    "- **K-fold cross-validation** overcomes this limitation and provides more reliable estimates\n",
    "- But, train/test split is still useful because of its **flexibility and speed**"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
